home *** CD-ROM | disk | FTP | other *** search
/ CYBER.XPO.95 / CYBER.XPO.95 (Arsenal Computer).ISO / popreq / amiga1 / brknm371.lha / BreakName / BreakName.Asm < prev    next >
Assembly Source File  |  1994-04-18  |  7KB  |  322 lines

  1.         NOLIST
  2.  
  3. *AUTO:        genam    <file>.asm
  4.  
  5.         opt    o+,ow-,ow6+,NODEBUG,NOLINE
  6.  
  7.  
  8. ;* $Revision Header built automatically *************** (do not edit) ************
  9. ;*
  10. ;* ⌐ Copyright by GuntherSoft
  11. ;*
  12. ;* File             : SnakeSYS:ASMPrgs/Utils/BreakName.Asm
  13. ;* Created on       : Sunday, 20.03.94 14:39:32
  14. ;* Created by       : Kai Iske
  15. ;* Current revision : V37.1
  16. ;*
  17. ;*
  18. ;* Purpose
  19. ;* -------
  20. ;*   - Break a cli process by name. Enhancement to C:Break
  21. ;*     Only Task/Process name needed; no pathnames required
  22. ;*     BreakName is PURE
  23. ;*
  24. ;* Revision V37.1
  25. ;* --------------
  26. ;* created on Monday, 18.04.94 19:57:29  by  Kai Iske.   LogMessage :
  27. ;*   - FindTask was called with A0=NULL instead of A1=NULL ;)
  28. ;*     Whoops, better check registers next time
  29. ;*   - ReturnCode wasn`t set correctly
  30. ;*
  31. ;* Revision V37.0
  32. ;* --------------
  33. ;* created on Sunday, 20.03.94 14:39:32  by  Kai Iske.   LogMessage :
  34. ;*     --- Initial release ---
  35. ;*
  36. ;*********************************************************************************
  37. REVISION  MACRO
  38.           dc.b "37.1"
  39.           ENDM
  40. REVDATE   MACRO
  41.           dc.b "18.04.94"
  42.           ENDM
  43. REVTIME   MACRO
  44.           dc.b "19:57:29"
  45.           ENDM
  46. AUTHOR    MACRO
  47.           dc.b "Kai Iske"
  48.           ENDM
  49. VERNUM    EQU  37
  50. REVNUM    EQU  1
  51.  
  52.  
  53.  
  54.         INCLUDE    Exec/Types.i
  55.         INCLUDE    Exec/Memory.i
  56.         INCLUDE    Exec/Exec_Lib.i
  57.         INCLUDE    Dos/DosExtens.i
  58.         INCLUDE    Dos/Dos_Lib.i
  59.         INCLUDE    Utility/Utility_Lib.i
  60.         INCLUDE    Misc/MyMacros.i
  61.  
  62.  
  63.  
  64. **********************************************************************
  65. *                              Let`s go                              *
  66. **********************************************************************
  67.         CARGS    #-(2048+16),_DOSBase.L,_UtilityBase.L,Vecs.L,Args.L,CopiedName.B
  68.  
  69. START        movem.l    d1-d7/a0-a6,-(sp)
  70.  
  71.         link    a4,#-(2048+16)                ; Get space for vars
  72.  
  73.         move.l    #((2048+16)>>1),d0            ; Clear local areas
  74.         moveq    #0,d1
  75.         move.l    a4,a0
  76. .Clr        move.w    d1,-(a0)
  77.         dbf    d0,.Clr
  78.  
  79.         sub.l    a1,a1                    ; Don`t launch from WB
  80.         CALLSYS    FindTask
  81.         move.l    d0,a3
  82.         tst.l    pr_CLI(a3)
  83.         bne.s    .FromCLI
  84.         DOLIB    Forbid
  85.  
  86.         lea    pr_MsgPort(a3),a0
  87.         DOLIB    WaitPort
  88.  
  89.         lea    pr_MsgPort(a3),a0
  90.         DOLIB    GetMsg
  91.  
  92.         move.l    d0,a1
  93.         DOLIB    ReplyMsg
  94.  
  95.         unlk    a4
  96.         movem.l    (sp)+,d1-d7/a0-a6
  97.         moveq    #0,d0
  98.         rts
  99.  
  100. .FromCLI    lea    DosName(pc),a1                ; Open some libraries
  101.         move.l    #0,d0
  102.         CALLSYS    OpenLibrary
  103.         tst.l    d0
  104.         beq    .EndPrg
  105.         move.l    d0,_DOSBase(a4)
  106.  
  107.         cmp.w    #37,LIB_VERSION(a6)            ; Check system we`re running on
  108.         bge.s    .OSOk
  109.         RELLIB    Output,_DOSBase                ; Issue error
  110.         move.l    d0,d1
  111.         lea    OSErr(pc),a0
  112.         move.l    a0,d2
  113.         move.l    #61,d3
  114.         DOLIB    Write 
  115.         move.l    _DOSBase(a4),a1
  116.         CALLSYS    CloseLibrary
  117.         unlk    a4
  118.         movem.l    (sp)+,d1-d7/a0-a6
  119.         moveq    #20,d0
  120.         rts
  121.  
  122.  
  123. .OSOk        lea    UtilName(pc),a1
  124.         move.l    #37,d0
  125.         CALLSYS    OpenLibrary
  126.         tst.l    d0
  127.         beq    .EndPrg
  128.         move.l    d0,_UtilityBase(a4)
  129.  
  130.         move.l    #((F_ARG+1)<<2),d0            ; Alloc buffer for Arguments
  131.         move.l    #MEMF_CLEAR|MEMF_PUBLIC,d1
  132.         CALLSYS    AllocVec
  133.         tst.l    d0
  134.         beq    .EndPrg
  135.         bne.s    .GotVecs
  136.         move.l    #ERROR_NO_FREE_STORE,d0
  137.         bra    .Error2
  138. .GotVecs    move.l    d0,Vecs(a4)
  139.  
  140.         lea    Template(pc),a0                ; Parse command line
  141.         move.l    a0,d1
  142.         move.l    d0,d2
  143.         moveq    #0,d3
  144.         RELLIB    ReadArgs,_DOSBase
  145.         tst.l    d0
  146.         beq    .Error
  147.         move.l    d0,Args(a4)
  148.  
  149.         move.l    Vecs(a4),a0                ; All flag set ???
  150.         tst.l    (ALL_ARG*4)(a0)
  151.         beq.s    .StartLoop                ; Set all other flags regardless
  152.         moveq    #1,d0                    ; of what was specified
  153.         move.l    d0,(C_ARG*4)(a0)
  154.         move.l    d0,(D_ARG*4)(a0)
  155.         move.l    d0,(E_ARG*4)(a0)
  156.         move.l    d0,(F_ARG*4)(a0)
  157.  
  158. .StartLoop    CALLSYS    Forbid                    ; Please no other tasks at the moment
  159.  
  160.         RELLIB    MaxCli,_DOSBase                ; Get number of CLI processes
  161.         move.l    d0,d7
  162.  
  163. .LoopProc    move.l    d7,d1                    ; Get Process for this CLI number
  164.         RELLIB    FindCliProc,_DOSBase
  165.         tst.l    d0
  166.         beq    .NoProc
  167.         move.l    d0,a3                    ; Copy address of process
  168.  
  169.         move.l    pr_CLI(a3),d0                ; Get pointer to CLI structure
  170.         lsl.l    #2,d0
  171.         move.l    d0,d1
  172.         beq    .NoProc
  173.         move.l    d0,a1
  174.  
  175.         move.l    cli_CommandName(a1),d0            ; Get it`s commandname
  176.         lsl.l    #2,d0
  177.         move.l    d0,d1
  178.         beq    .NoProc
  179.         move.l    d0,a1
  180.  
  181.         moveq    #0,d0
  182.         move.b    (a1)+,d0                ; Get length of name of process to check with
  183.         subq.w    #1,d0
  184.         lea    CopiedName(a4),a0            ; Get Address of Name buffer
  185.  
  186. .CopyName    move.b    (a1)+,(a0)+                ; Copy Name
  187.         dbf    d0,.CopyName
  188.         move.b    #0,(a0)
  189.  
  190.         lea    CopiedName(a4),a1            ; Check name (absolute)
  191.         move.l    Vecs(a4),a0                ; Get name of process to break
  192.         move.l    (PROC_ARG*4)(a0),a0
  193.         RELLIB    Stricmp,_UtilityBase            ; Check names
  194.         tst.l    d0
  195.         beq.s    .GotProc
  196.  
  197.         lea    CopiedName(a4),a0            ; Check name (only filepart)
  198.         move.l    a0,d1
  199.         RELLIB    FilePart,_DOSBase
  200.         move.l    d0,d1                    ; Store pointer of filepart
  201.         beq    .NoProc
  202.         move.l    d0,a1
  203.  
  204.         move.l    Vecs(a4),a0                ; Get name of process to break
  205.         move.l    (PROC_ARG*4)(a0),a0
  206.  
  207.         RELLIB    Stricmp,_UtilityBase            ; Check names
  208.         tst.l    d0
  209.         bne.s    .NoProc
  210.  
  211. .GotProc    move.l    Vecs(a4),a5                ; Which signals to send ???
  212.  
  213.         tst.l    (C_ARG*4)(a5)                ; Send C ???
  214.         bne.s    .DoC
  215.         tst.l    (D_ARG*4)(a5)                ; Send D ???
  216.         bne.s    .NoC
  217.         tst.l    (E_ARG*4)(a5)                ; Send E ???
  218.         bne.s    .NoC
  219.         tst.l    (F_ARG*4)(a5)                ; Send F ???
  220.         bne.s    .NoC
  221.  
  222. .DoC        move.l    a3,a1
  223.         move.l    #SIGBREAKF_CTRL_C,d0
  224.         CALLSYS    Signal
  225.  
  226. .NoC        tst.l    (D_ARG*4)(a5)
  227.         beq.s    .NoD
  228.         move.l    a3,a1
  229.         move.l    #SIGBREAKF_CTRL_D,d0
  230.         CALLSYS    Signal
  231.  
  232. .NoD        tst.l    (E_ARG*4)(a5)
  233.         beq.s    .NoE
  234.         move.l    a3,a1
  235.         move.l    #SIGBREAKF_CTRL_E,d0
  236.         CALLSYS    Signal
  237.  
  238. .NoE        tst.l    (F_ARG*4)(a5)
  239.         beq.s    .Done
  240.         move.l    a3,a1
  241.         move.l    #SIGBREAKF_CTRL_F,d0
  242.         CALLSYS    Signal
  243.         bra.s    .Done
  244.  
  245. .NoProc        subq.l    #1,d7                    ; Loop
  246.         bne    .LoopProc
  247.  
  248.         CALLSYS    Permit
  249.  
  250. .Done        moveq    #0,d7                    ; Set returncode
  251.         bra.s    .EndPrg2
  252.  
  253. .Error        RELLIB    IoErr,_DOSBase                ; Issue error
  254.         move.l    d0,d1
  255. .Error2        lea    FaultStr(pc),a0
  256.         move.l    a0,d2
  257.         RELLIB    PrintFault,_DOSBase
  258.  
  259. .EndPrg        moveq    #20,d7                    ; Set returncode
  260.  
  261. .EndPrg2    tst.l    Args(a4)                ; Args there ???
  262.         beq.s    .NoArgs
  263.         move.l    Args(a4),d1
  264.         RELLIB    FreeArgs,_DOSBase
  265.  
  266. .NoArgs        tst.l    Vecs(a4)                ; Vecs there ???
  267.         beq.s    .NoVecs
  268.         move.l    Vecs(a4),a1
  269.         CALLSYS    FreeVec
  270.  
  271. .NoVecs        tst.l    _UtilityBase(a4)            ; Close libs
  272.         beq.s    .NoUtil
  273.         move.l    _UtilityBase(a4),a1
  274.         CALLSYS    CloseLibrary
  275.  
  276. .NoUtil        tst.l    _DOSBase(a4)
  277.         beq.s    .NoDOS
  278.         move.l    _DOSBase(a4),a1
  279.         CALLSYS    CloseLibrary
  280.  
  281. .NoDOS        unlk    a4
  282.         move.l    d7,d0
  283.         movem.l    (sp)+,d1-d7/a0-a6
  284.         rts
  285.  
  286.  
  287.  
  288.  
  289.  
  290. **********************************************************************
  291. *                          Our data section                          *
  292. **********************************************************************
  293. DosName        dc.b    "dos.library",0
  294. UtilName    dc.b    "utility.library",0
  295. FaultStr    dc.b    "BreakName ",0
  296. OSErr        dc.b    "You must use KickStart 2.04 (37.175) or higher for BreakName",10,0
  297.         EVEN
  298.  
  299.  
  300.  
  301. **********************************************************************
  302. *                           Version string                           *
  303. **********************************************************************
  304. Ver        dc.b    0,"$VER: BreakName "
  305.         REVISION
  306.         dc.b    " ("
  307.         REVDATE
  308.         dc.b    ")",0
  309.         EVEN
  310.  
  311. **********************************************************************
  312. *                         Template settings                          *
  313. **********************************************************************
  314. Template    dc.b    "PROCESS/A,ALL/S,C/S,D/S,E/S,F/S",0
  315. PROC_ARG    EQU    0
  316. ALL_ARG        EQU    1
  317. C_ARG        EQU    2
  318. D_ARG        EQU    3
  319. E_ARG        EQU    4
  320. F_ARG        EQU    5
  321.         END
  322.